﻿#define _CRT_SECURE_NO_WARNINGS
#include<iostream>
using namespace std;
#include <vector>
#include <string>
#include <deque>
#include <algorithm>
#include <ctime>

/*
* 有5名选手：选手ABCDE，10个评委分别对每一名选手打分，去除最高分，去除评委中最低分，取平均分。
* 1.创建5名选手，放到vector中
* 2.遍历vector容器，取出来每一个选手，执行for循环，可以把10个评分打分存到deque容器中
* 3.sort算法对deque容器中分数排序，pop_back pop_front去除最高分和最低分
* 4.deque容器遍历一遍，累加分数，累加分数/d.size()
* 5.person.score = 平均分
*/
class PersonDeque
{
public:
	PersonDeque(string name, int score)
	{
		this->m_Name = name;
		this->m_Score = score;
	}

	//1.人名；
	string m_Name;
	//2.分数，平均分；
	int m_Score;
};
void createPerson(vector<PersonDeque>& v)
{
	string nameSeed = "ABCDE";
	for (int i = 0; i < 5; ++i)
	{
		string name = "选手";
		name += nameSeed[i];

		int score = 0;
		PersonDeque p(name, score);

		v.push_back(p);
	}
}
void setScore(vector<PersonDeque>& v)
{
	for (vector<PersonDeque> ::iterator it = v.begin(); it != v.end(); ++it)
	{
		//7.对5个人进行打分；
		deque<int> d;
		for (int i = 0; i < 10; ++i)
		{
			//60~100;
			int score = rand() % 41 + 60;
			d.push_back(score);
		}

		//8.先看下打分；
		/*for (deque<int>::iterator dit = d.begin(); dit != d.end(); ++dit)
		{
			cout << *dit << " ";
		}
		cout << endl;*/
		/*60 77 80 74 82 81 99 62 85 88
		66 79 94 77 99 100 62 71 90 84
		61 68 67 90 65 60 97 80 98 70
		95 97 71 77 84 87 61 78 80 73
		63 91 99 94 62 91 72 63 64 81*/

		//9.排序；从小到大；
		sort(d.begin(), d.end());

		//10.去除最高和最低；
		d.pop_back();//最高
		d.pop_front();

		//11.总分；
		int sum = 0;
		for (deque<int>::iterator dit = d.begin(); dit != d.end(); ++dit)
		{
			sum += *dit;
		}

		//12.平均分；
		int avg = sum / d.size();

		//(*it).m_Score = avg;
		it->m_Score = avg;
	}
}
void showScore(vector<PersonDeque>& v)
{
	for (vector<PersonDeque>::iterator it = v.begin(); it != v.end(); ++it)
	{
		cout << "姓名：" << it->m_Name << "，最终的平均分为：" << it->m_Score << endl;
	}
}

//main322：任务案例评委打分
int main322()
{
	//14.设置随机数种子；
	srand((unsigned int)time(NULL));

	//3.创建容器，存放选手；
	vector<PersonDeque> v;

	//4.创建5名选手；
	createPerson(v);

	//5.测试；
	/*for (vector<PersonDeque>::iterator it = v.begin(); it != v.end(); ++it)
	{
		cout << "姓名：" << (*it).m_Name << endl;
	}*/
	/*姓名：选手A
	姓名：选手B
	姓名：选手C
	姓名：选手D
	姓名：选手E*/

	//6.打分；
	setScore(v);

	//13.展示平均分；
	showScore(v);
	/*姓名：选手A，最终的平均分为：77
	姓名：选手B，最终的平均分为：83
	姓名：选手C，最终的平均分为：78
	姓名：选手D，最终的平均分为：83
	姓名：选手E，最终的平均分为：78*/

	system("pause");
	return EXIT_SUCCESS;
}